package com.ql.util;

import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * Created by victor on 2016/12/30.
 */
public class TransFormUtils {

    /**
     * 将list转为map
     *
     * @param list
     * @param predicate1 key
     * @param predicate2 value
     * @return 省略list构造过程   应用封装好的工具类 只需要一行代码就可以完成list到map的转换
     * Map<Integer, User> map = TransFormUtils.transformToMap(userList, p->p.getId(), p->p);
     * <p>
     * Map<Integer, String> map2 = TransFormUtils.transformToMap(userList, p->p.getId(), p->p.getName());
     */
    public static <K, V, T> Map<K, V> transformToMap(List<T> list, Function<T, K> predicate1, Function<T, V> predicate2) {
        return list.stream().collect(Collectors.toMap(predicate1, predicate2));
    }


    /**
     * 将list<T>转为Map<K,List<V>>
     *
     * @param list
     * @param predicate1 map中的key
     * @param predicate2 map中的list的元素
     * @return List<DeviceUser> list = new ArrayList<DeviceUser>();
     * //省略list的构造
     * Map<Integer, List<String>> deviceMap = TransFormUtils.transformToMapList(list, p->p.getDeviceType(), p->p.getDeviceId());
     */
    public static <K, V, T> Map<K, List<V>> transformToMapList(List<T> list, Function<T, K> predicate1, Function<T, V> predicate2) {
        return list.stream().collect(
                Collectors.groupingBy(predicate1,
                        Collectors.mapping(predicate2,
                                Collectors.toList())));
    }


}
